/**
 * 为用户添加教派信息的脚本
 * 为当前用户（ID: 2019）添加一个测试教派
 */

const mysql = require('mysql2/promise');

// 数据库配置
const dbConfig = {
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: '123456',
    database: 'game_db'
};

class ReligionAdder {
    constructor() {
        this.connection = null;
    }

    async connect() {
        try {
            this.connection = await mysql.createConnection(dbConfig);
            console.log('✅ 数据库连接成功');
        } catch (error) {
            console.error('❌ 数据库连接失败:', error.message);
            throw error;
        }
    }

    async disconnect() {
        if (this.connection) {
            await this.connection.end();
            console.log('🔌 数据库连接已关闭');
        }
    }

    // 检查用户是否存在
    async checkUserExists(userId) {
        try {
            const [rows] = await this.connection.execute(
                'SELECT id, name, lvl FROM characters WHERE id = ?',
                [userId]
            );

            if (rows.length === 0) {
                console.log(`❌ 用户ID ${userId} 不存在`);
                return null;
            }

            console.log(`✅ 用户信息: ID=${rows[0].id}, 姓名=${rows[0].name}, 等级=${rows[0].lvl}`);
            return rows[0];
        } catch (error) {
            console.error('❌ 查询用户失败:', error.message);
            return null;
        }
    }

    // 检查用户是否已有教派
    async checkUserReligion(userId) {
        try {
            const [rows] = await this.connection.execute(
                'SELECT * FROM character_religions WHERE characterId = ?',
                [userId]
            );

            if (rows.length > 0) {
                console.log(`⚠️ 用户ID ${userId} 已有教派信息:`);
                console.log(`   教派ID: ${rows[0].id}`);
                console.log(`   教派名称: ${rows[0].name}`);
                console.log(`   教派等级: ${rows[0].level}`);
                return rows[0];
            }

            console.log(`✅ 用户ID ${userId} 暂无教派信息`);
            return null;
        } catch (error) {
            console.error('❌ 查询用户教派信息失败:', error.message);
            return null;
        }
    }

    // 为用户添加教派
    async addReligionToUser(userId, religionName = '测试教派', religionDescription = '这是一个测试教派') {
        try {
            // 先检查是否已有教派
            const existingReligion = await this.checkUserReligion(userId);
            if (existingReligion) {
                console.log('⚠️ 用户已有教派，将更新教派信息');

                // 更新现有教派信息
                const [result] = await this.connection.execute(
                    'UPDATE character_religions SET name = ?, description = ?, level = level + 1, updatedAt = NOW() WHERE characterId = ?',
                    [religionName, religionDescription, userId]
                );

                console.log('✅ 教派信息更新成功');
                console.log(`   影响行数: ${result.affectedRows}`);

                // 重新查询验证
                return await this.checkUserReligion(userId);
            } else {
                // 添加新的教派信息
                const [result] = await this.connection.execute(
                    'INSERT INTO character_religions (characterId, name, description, level, joinedAt, updatedAt) VALUES (?, ?, ?, 1, NOW(), NOW())',
                    [userId, religionName, religionDescription]
                );

                console.log('✅ 教派信息添加成功');
                console.log(`   插入ID: ${result.insertId}`);
                console.log(`   影响行数: ${result.affectedRows}`);

                // 重新查询验证
                return await this.checkUserReligion(userId);
            }
        } catch (error) {
            console.error('❌ 添加/更新教派信息失败:', error.message);
            return null;
        }
    }

    // 运行添加教派流程
    async runAddReligion(userId = 2019) {
        console.log(`🔍 开始为用户ID ${userId} 添加教派信息...\n`);

        try {
            await this.connect();

            // 1. 检查用户是否存在
            console.log('1️⃣ 检查用户是否存在:');
            const user = await this.checkUserExists(userId);
            if (!user) {
                console.log('❌ 用户不存在，无法添加教派');
                return;
            }
            console.log('');

            // 2. 检查用户当前教派状态
            console.log('2️⃣ 检查用户当前教派状态:');
            const currentReligion = await this.checkUserReligion(userId);
            console.log('');

            // 3. 添加/更新教派信息
            console.log('3️⃣ 添加/更新教派信息:');
            const religionName = `测试教派_${new Date().getTime()}`;
            const religionDescription = `这是一个为测试用户${userId}创建的教派`;

            const newReligion = await this.addReligionToUser(userId, religionName, religionDescription);
            console.log('');

            // 4. 验证结果
            console.log('4️⃣ 验证教派信息:');
            if (newReligion) {
                console.log('🎉 教派信息操作成功！');
                console.log(`   用户ID: ${userId}`);
                console.log(`   教派ID: ${newReligion.id}`);
                console.log(`   教派名称: ${newReligion.name}`);
                console.log(`   教派描述: ${newReligion.description}`);
                console.log(`   教派等级: ${newReligion.level}`);
                console.log(`   加入时间: ${newReligion.joinedAt}`);
                console.log(`   更新时间: ${newReligion.updatedAt}`);
            } else {
                console.log('❌ 教派信息操作失败');
            }

        } catch (error) {
            console.error('💥 添加教派过程中发生错误:', error.message);
        } finally {
            await this.disconnect();
        }
    }
}

// 运行添加教派
async function main() {
    const adder = new ReligionAdder();
    await adder.runAddReligion(2019); // 为ID为2019的用户添加教派
}

// 如果直接运行此脚本
if (require.main === module) {
    main().catch((error) => {
        console.error('💥 脚本执行失败:', error.message);
        process.exit(1);
    });
}

module.exports = ReligionAdder;
